לצורך העניין אקרא להן tableA ו-tableB.
בטבלה tableA יש את השדות ID, name ו- image.
בטבלה tableB יש לי ID ו-deleted_img.
מה שבעצם אני רוצה לעשות זה לבחור מטבלה tableA את כל התמונות (image) וגם לבחור מטבלה tableB את כל התמונות (deleted_img) שאינן זהות לתמונות אחרות (בשם שלהן).
מקווה שעד לפה מובן (?)
אוקיי. ואת שאר התמונות (שבחרתי מהטבלה tableB והן אינן זהות לשמות של תמונות אחרות ב-tableA ) , אני גם רוצה להציג.
המטרה שלי היא להציג את כל התמונות שהועלו (או נמחקו מה-DB אך לא מהשרת FTP) ללא כפילויות.
15 תשובות
ניסיתי להשתמש ב-MINUS אבל משום מה זה לא עובד ומחזיר שגיאה.
ניסיתי גם:
SELECT tableA.image, tableB.deleted_img
FROM tableA, tableB
LEFT OUTER JOIN tableB
ON tableA.image = tableB.deleted_img
WHERE tableB.deleted_img is null
ORDER by image") or die (mysql_error());
אל לצערי גם זה לא עובד בדיוק כמו שצריך...
לא כל כך הצלחתי להבין את ההסבר שלך. תן דוגמה לתוכן של הטבלאות ולמה שהשליפה אמורה להוציא.
אוקיי.
2 הטבלאות הנ"ל הן: products ו-deleted_images.
יש לי בטבלה products כמה שדות: prod_id, name, image.
ואילו בטבלה deleted_images יש ID ו- deleted_img.
יש לי להוספת מוצרים, כך שאפשר גם , כמו שאתה יכול להבין, להעלאות תמונה ל-DB (בתור שֵם של הקובץ כמובן) + העלאת התמונה לשרת FTP.
אם אני מוחק מוצר מהטבלה products ולא מוחק את התמונה עצמה מה-FTP אז זה מכניס באופן אוטומטי שורה חדשה לטבלה deleted_images, כך שבשדה deleted_img בטבלה הזו יהיה שם התמונה של המוצר הנ"ל שהרגע נמחק.
ה-המטרה של כל העניין: לעשות דף חדש שבו יהיו מוצגות כל התמונות שהועלו אי פעם אשר נמצאות כעת על השרת ללא כפילויות.
[כשאני מדבר על כפילויות, הכוונה היא שאם למשל העלאתי תמונה (ששמה יהיה לצורך העניין - test.jpg) למוצר מסוים ואז מחקתי את המוצר ( הרי שהקובץ נשאר על השרת) והתמונה test.jpg כבר מקושרת לקובץ מסוים בטבלה products אז תיווצר כפילות- היות והתמונה נמצאת ב-2 הטבלאות אז יראו אותה בדף החדש פעמיים - פעם אחת כשהיא מהטבלה products ופעם אחת כשהיא מהטבלה deleted_images ].
מקווה שהייתי ברור....תודה. =]
למה לא לעשות בטבלה הראשונה תא נוסף בשם is_deleted?
זה טוב יותר מכל בחינה
אבל אם אני עושה תא כזה (is_deleted) אז בעצם לא עשיתי כלום. הרי אחרי הכל אני רוצה למחוק את השורה ( המוצר ) הזה מהטבלה. וה-is_deleted יוכל מקסימום להפוך אותה ללא פעילה.
אם הבנתי נכון, אז אתה מדבר על union:
SELECT `image`
FROM `products`
) UNION (
SELECT `deleted_img`
FROM `deleted_images`
)
אתה יכול למחוק את הסוגריים ואת הרווחים כמובן. פשוט אני כותב כך מתוך הרגל (כשעושים union לשאילתות גדולות זה עוזר).
זה בדיוק מה שרציתי לעשות מהתחלה.
אבל יש קבצים שאני לא רוצה להציג כדוגמת: index.html או .htaccess
אולי יש לזה פתרון?
תעשה רשימה של קבצים בקוד שאתה לא רוצה להציג
או יותר טוב - פשוט תוציא מהתיקיה רק שמות של קבצים שנגמרים בסיומת של תמונות.